<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta name="generator" content="ApiGen 2.7.0" />
	<meta name="robots" content="noindex" />

	<title>File lib/php/externals/recaptcha/recaptchalib.php | nort</title>

	<script type="text/javascript" src="resources/combined.js?1481722677"></script>
	<script type="text/javascript" src="elementlist.js?1094816827"></script>
	<link rel="stylesheet" type="text/css" media="all" href="resources/style.css?1567499433" />

</head>

<body>
<div id="left">
	<div id="menu">
		<a href="index.html" title="Overview"><span>Overview</span></a>


		<div id="groups">
			<h3>Packages</h3>
			<ul>
				<li><a href="package-App.html">App<span></span></a>
						<ul>
				<li><a href="package-App.Saas.html">Saas</a>
						</li>
				<li><a href="package-App.saas.html">saas</a>
						</li>
				<li><a href="package-App.SaaS.html">SaaS<span></span></a>
						<ul>
				<li><a href="package-App.saas.Logic.html">Logic</a>
						</li>
				<li><a href="package-App.SaaS.SaaS.html">SaaS</a>
						</li>
				<li><a href="package-App.Saas.Tables.html">Tables</a>
						</li>
				<li><a href="package-App.Saas.Vo.html">Vo</a>
						</li>
							</ul></li></ul></li>
				<li><a href="package-aqua.html">aqua<span></span></a>
						<ul>
				<li><a href="package-aqua.tools.html">tools<span></span></a>
						<ul>
				<li><a href="package-aqua.tools.Monitor.html">Monitor</a>
						</li>
							</ul></li></ul></li>
				<li><a href="package-flashservices.html">flashservices<span></span></a>
						<ul>
				<li><a href="package-flashservices.adapters.html">adapters</a>
						</li>
				<li><a href="package-flashservices.debug.html">debug</a>
						</li>
				<li><a href="package-flashservices.exception.html">exception</a>
						</li>
				<li><a href="package-flashservices.filters.html">filters</a>
						</li>
				<li><a href="package-flashservices.io.html">io</a>
						</li>
				<li><a href="package-flashservices.sql.html">sql</a>
						</li>
				<li><a href="package-flashservices.util.html">util</a>
						</li>
							</ul></li>
				<li><a href="package-Mekayotl.html">Mekayotl<span></span></a>
						<ul>
				<li><a href="package-Mekayotl.core.html">core</a>
						</li>
				<li><a href="package-Mekayotl.database.html">database<span></span></a>
						<ul>
				<li><a href="package-Mekayotl.database.dal.html">dal</a>
						</li>
				<li><a href="package-Mekayotl.database.mysql.html">mysql</a>
						</li>
				<li><a href="package-Mekayotl.database.sqlite.html">sqlite</a>
						</li>
							</ul></li>
				<li><a href="package-Mekayotl.tools.html">tools<span></span></a>
						<ul>
				<li><a href="package-Mekayotl.tools.render.html">render<span></span></a>
						<ul>
				<li><a href="package-Mekayotl.tools.render.html.html">html</a>
						</li>
							</ul></li>
				<li><a href="package-Mekayotl.tools.renders.html">renders</a>
						</li>
							</ul></li></ul></li>
				<li class="active"><a href="package-None.html">None</a>
						</li>
				<li><a href="package-PHP.html">PHP</a>
						</li>
				<li><a href="package-PHPMailer.html">PHPMailer</a>
						</li>
				<li><a href="package-Services.html">Services<span></span></a>
						<ul>
				<li><a href="package-Services.JSON.html">JSON</a>
						</li>
							</ul></li>
				<li><a href="package-Swift.html">Swift<span></span></a>
						<ul>
				<li><a href="package-Swift.ByteStream.html">ByteStream</a>
						</li>
				<li><a href="package-Swift.CharacterStream.html">CharacterStream</a>
						</li>
				<li><a href="package-Swift.Encoder.html">Encoder</a>
						</li>
				<li><a href="package-Swift.Events.html">Events</a>
						</li>
				<li><a href="package-Swift.KeyCache.html">KeyCache</a>
						</li>
				<li><a href="package-Swift.Mailer.html">Mailer</a>
						</li>
				<li><a href="package-Swift.Mime.html">Mime</a>
						</li>
				<li><a href="package-Swift.Plugins.html">Plugins</a>
						</li>
				<li><a href="package-Swift.Transport.html">Transport</a>
						</li>
							</ul></li>
			</ul>
		</div>

		<hr />


		<div id="elements">
			<h3>Classes</h3>
			<ul>
				<li><a href="class-AcknowledgeMessage.html">AcknowledgeMessage</a></li>
				<li><a href="class-AMFDeserializer.html">AMFDeserializer</a></li>
				<li><a href="class-BasicGateway.html">BasicGateway</a></li>
				<li><a href="class-ByteArray.html">ByteArray</a></li>
				<li><a href="class-CommandMessage.html">CommandMessage</a></li>
				<li><a href="class-ErrorMessage.html">ErrorMessage</a></li>
				<li><a href="class-Executive.html" class="invalid">Executive</a></li>
				<li><a href="class-Gateway.html" class="invalid">Gateway</a></li>
				<li><a href="class-HtmlParser.html">HtmlParser</a></li>
				<li><a href="class-MethodTable.html">MethodTable</a></li>
				<li><a href="class-PageableRecordSet.html">PageableRecordSet</a></li>
				<li><a href="class-PHPMailer.html">PHPMailer</a></li>
				<li><a href="class-ProfilingHeader.html">ProfilingHeader</a></li>
				<li><a href="class-ReCaptchaResponse.html">ReCaptchaResponse</a></li>
				<li><a href="class-RecordSet.html">RecordSet</a></li>
				<li><a href="class-RemotingMessage.html">RemotingMessage</a></li>
				<li><a href="class-Twitter.html">Twitter</a></li>
			</ul>



			<h3>Exceptions</h3>
			<ul>
				<li><a href="class-phpmailerException.html">phpmailerException</a></li>
			</ul>


			<h3>Functions</h3>
			<ul>
				<li><a href="function-__env.html">__env</a></li>
				<li><a href="function-__setUri.html">__setUri</a></li>
				<li><a href="function-_recaptcha_aes_encrypt.html">_recaptcha_aes_encrypt</a></li>
				<li><a href="function-_recaptcha_aes_pad.html">_recaptcha_aes_pad</a></li>
				<li><a href="function-_recaptcha_http_post.html">_recaptcha_http_post</a></li>
				<li><a href="function-_recaptcha_mailhide_email_parts.html">_recaptcha_mailhide_email_parts</a></li>
				<li><a href="function-_recaptcha_mailhide_urlbase64.html">_recaptcha_mailhide_urlbase64</a></li>
				<li><a href="function-_recaptcha_qsencode.html">_recaptcha_qsencode</a></li>
				<li><a href="function-adapterMap.html">adapterMap</a></li>
				<li><a href="function-amfErrorHandler.html">amfErrorHandler</a></li>
				<li><a href="function-classLoaderAction.html">classLoaderAction</a></li>
				<li><a href="function-debugAction.html">debugAction</a></li>
				<li><a href="function-deserializationAction.html" class="invalid">deserializationAction</a></li>
				<li><a href="function-executionAction.html" class="invalid">executionAction</a></li>
				<li><a href="function-file_put_contents.html">file_put_contents</a></li>
				<li><a href="function-HtmlParser_ForFile.html">HtmlParser_ForFile</a></li>
				<li><a href="function-HtmlParser_ForURL.html">HtmlParser_ForURL</a></li>
				<li><a href="function-is_a.html">is_a</a></li>
				<li><a href="function-json_decode.html">json_decode</a></li>
				<li><a href="function-json_encode.html">json_encode</a></li>
				<li><a href="function-mapRecordSet.html">mapRecordSet</a></li>
				<li><a href="function-microtime_float.html" class="invalid">microtime_float</a></li>
				<li><a href="function-ob_get_clean.html">ob_get_clean</a></li>
				<li><a href="function-patched_array_search.html" class="invalid">patched_array_search</a></li>
				<li><a href="function-recaptcha_check_answer.html">recaptcha_check_answer</a></li>
				<li><a href="function-recaptcha_get_html.html">recaptcha_get_html</a></li>
				<li class="active"><a href="function-recaptcha_get_signup_url.html">recaptcha_get_signup_url</a></li>
				<li><a href="function-recaptcha_mailhide_html.html">recaptcha_mailhide_html</a></li>
				<li><a href="function-recaptcha_mailhide_url.html">recaptcha_mailhide_url</a></li>
				<li><a href="function-reportExceptions.html">reportExceptions</a></li>
				<li><a href="function-securityAction.html">securityAction</a></li>
				<li><a href="function-serializationAction.html" class="invalid">serializationAction</a></li>
				<li><a href="function-strrstr.html">strrstr</a></li>
				<li><a href="function-strstrafter.html">strstrafter</a></li>
				<li><a href="function-toPhp.html">toPhp</a></li>
			</ul>
		</div>
	</div>
</div>

<div id="splitter"></div>

<div id="right">
<div id="rightInner">
	<form id="search">
		<input type="hidden" name="cx" value="" />
		<input type="hidden" name="ie" value="UTF-8" />
		<input type="text" name="q" class="text" />
		<input type="submit" value="Search" />
	</form>

	<div id="navigation">
		<ul>
			<li>
				<a href="index.html" title="Overview"><span>Overview</span></a>
			</li>
			<li>
				<a href="package-None.html" title="Summary of None"><span>Package</span></a>
			</li>
			<li>
				<a href="function-recaptcha_get_signup_url.html" title="Summary of recaptcha_get_signup_url"><span>Function</span></a>
			</li>
		</ul>
		<ul>
			<li>
				<a href="tree.html" title="Tree view of classes, interfaces, traits and exceptions"><span>Tree</span></a>
			</li>
		</ul>
		<ul>
		</ul>
	</div>

<pre><code><a href="#1" id="1" class="l">  1: </a><span class="xlang">&lt;?php</span>
<a href="#2" id="2" class="l">  2: </a><span class="php-comment">/*
</span><a href="#3" id="3" class="l">  3: </a><span class="php-comment"> * This is a PHP library that handles calling reCAPTCHA.
</span><a href="#4" id="4" class="l">  4: </a><span class="php-comment"> *    - Documentation and latest version
</span><a href="#5" id="5" class="l">  5: </a><span class="php-comment"> *          http://recaptcha.net/plugins/php/
</span><a href="#6" id="6" class="l">  6: </a><span class="php-comment"> *    - Get a reCAPTCHA API Key
</span><a href="#7" id="7" class="l">  7: </a><span class="php-comment"> *          https://www.google.com/recaptcha/admin/create
</span><a href="#8" id="8" class="l">  8: </a><span class="php-comment"> *    - Discussion group
</span><a href="#9" id="9" class="l">  9: </a><span class="php-comment"> *          http://groups.google.com/group/recaptcha
</span><a href="#10" id="10" class="l"> 10: </a><span class="php-comment"> *
</span><a href="#11" id="11" class="l"> 11: </a><span class="php-comment"> * Copyright (c) 2007 reCAPTCHA -- http://recaptcha.net
</span><a href="#12" id="12" class="l"> 12: </a><span class="php-comment"> * AUTHORS:
</span><a href="#13" id="13" class="l"> 13: </a><span class="php-comment"> *   Mike Crawford
</span><a href="#14" id="14" class="l"> 14: </a><span class="php-comment"> *   Ben Maurer
</span><a href="#15" id="15" class="l"> 15: </a><span class="php-comment"> *
</span><a href="#16" id="16" class="l"> 16: </a><span class="php-comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy
</span><a href="#17" id="17" class="l"> 17: </a><span class="php-comment"> * of this software and associated documentation files (the &quot;Software&quot;), to deal
</span><a href="#18" id="18" class="l"> 18: </a><span class="php-comment"> * in the Software without restriction, including without limitation the rights
</span><a href="#19" id="19" class="l"> 19: </a><span class="php-comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
</span><a href="#20" id="20" class="l"> 20: </a><span class="php-comment"> * copies of the Software, and to permit persons to whom the Software is
</span><a href="#21" id="21" class="l"> 21: </a><span class="php-comment"> * furnished to do so, subject to the following conditions:
</span><a href="#22" id="22" class="l"> 22: </a><span class="php-comment"> *
</span><a href="#23" id="23" class="l"> 23: </a><span class="php-comment"> * The above copyright notice and this permission notice shall be included in
</span><a href="#24" id="24" class="l"> 24: </a><span class="php-comment"> * all copies or substantial portions of the Software.
</span><a href="#25" id="25" class="l"> 25: </a><span class="php-comment"> *
</span><a href="#26" id="26" class="l"> 26: </a><span class="php-comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
</span><a href="#27" id="27" class="l"> 27: </a><span class="php-comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
</span><a href="#28" id="28" class="l"> 28: </a><span class="php-comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
</span><a href="#29" id="29" class="l"> 29: </a><span class="php-comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
</span><a href="#30" id="30" class="l"> 30: </a><span class="php-comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
</span><a href="#31" id="31" class="l"> 31: </a><span class="php-comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
</span><a href="#32" id="32" class="l"> 32: </a><span class="php-comment"> * THE SOFTWARE.
</span><a href="#33" id="33" class="l"> 33: </a><span class="php-comment"> */</span>
<a href="#34" id="34" class="l"> 34: </a>
<a href="#35" id="35" class="l"> 35: </a><span class="php-comment">/**
</span><a href="#36" id="36" class="l"> 36: </a><span class="php-comment"> * The reCAPTCHA server URL's
</span><a href="#37" id="37" class="l"> 37: </a><span class="php-comment"> */</span>
<a href="#38" id="38" class="l"> 38: </a><span class="php-keyword2">define</span>(<span class="php-quote">&quot;RECAPTCHA_API_SERVER&quot;</span>, <span class="php-quote">&quot;http://www.google.com/recaptcha/api&quot;</span>);
<a href="#39" id="39" class="l"> 39: </a><span class="php-keyword2">define</span>(<span class="php-quote">&quot;RECAPTCHA_API_SECURE_SERVER&quot;</span>, <span class="php-quote">&quot;https://www.google.com/recaptcha/api&quot;</span>);
<a href="#40" id="40" class="l"> 40: </a><span class="php-keyword2">define</span>(<span class="php-quote">&quot;RECAPTCHA_VERIFY_SERVER&quot;</span>, <span class="php-quote">&quot;www.google.com&quot;</span>);
<a href="#41" id="41" class="l"> 41: </a>
<a href="#42" id="42" class="l"> 42: </a><span class="php-comment">/**
</span><a href="#43" id="43" class="l"> 43: </a><span class="php-comment"> * Encodes the given data into a query string format
</span><a href="#44" id="44" class="l"> 44: </a><span class="php-comment"> * @param $data - array of string elements to be encoded
</span><a href="#45" id="45" class="l"> 45: </a><span class="php-comment"> * @return string - encoded request
</span><a href="#46" id="46" class="l"> 46: </a><span class="php-comment"> */</span>
<a href="#47" id="47" class="l"> 47: </a><span class="php-keyword1">function</span> _recaptcha_qsencode(<span class="php-var">$data</span>)
<a href="#48" id="48" class="l"> 48: </a>{
<a href="#49" id="49" class="l"> 49: </a>    <span class="php-var">$req</span> = <span class="php-quote">&quot;&quot;</span>;
<a href="#50" id="50" class="l"> 50: </a>    <span class="php-keyword1">foreach</span> (<span class="php-var">$data</span> <span class="php-keyword1">as</span> <span class="php-var">$key</span> =&gt; <span class="php-var">$value</span>)
<a href="#51" id="51" class="l"> 51: </a>        <span class="php-var">$req</span> .= <span class="php-var">$key</span> . <span class="php-quote">'='</span> . <span class="php-keyword2">urlencode</span>(<span class="php-keyword2">stripslashes</span>(<span class="php-var">$value</span>)) . <span class="php-quote">'&amp;'</span>;
<a href="#52" id="52" class="l"> 52: </a>
<a href="#53" id="53" class="l"> 53: </a>    <span class="php-comment">// Cut the last '&amp;'</span>
<a href="#54" id="54" class="l"> 54: </a>    <span class="php-var">$req</span> = <span class="php-keyword2">substr</span>(<span class="php-var">$req</span>, <span class="php-num">0</span>, <span class="php-keyword2">strlen</span>(<span class="php-var">$req</span>) - <span class="php-num">1</span>);
<a href="#55" id="55" class="l"> 55: </a>    <span class="php-keyword1">return</span> <span class="php-var">$req</span>;
<a href="#56" id="56" class="l"> 56: </a>}
<a href="#57" id="57" class="l"> 57: </a>
<a href="#58" id="58" class="l"> 58: </a><span class="php-comment">/**
</span><a href="#59" id="59" class="l"> 59: </a><span class="php-comment"> * Submits an HTTP POST to a reCAPTCHA server
</span><a href="#60" id="60" class="l"> 60: </a><span class="php-comment"> * @param string $host
</span><a href="#61" id="61" class="l"> 61: </a><span class="php-comment"> * @param string $path
</span><a href="#62" id="62" class="l"> 62: </a><span class="php-comment"> * @param array $data
</span><a href="#63" id="63" class="l"> 63: </a><span class="php-comment"> * @param int port
</span><a href="#64" id="64" class="l"> 64: </a><span class="php-comment"> * @return array response
</span><a href="#65" id="65" class="l"> 65: </a><span class="php-comment"> */</span>
<a href="#66" id="66" class="l"> 66: </a><span class="php-keyword1">function</span> _recaptcha_http_post(<span class="php-var">$host</span>, <span class="php-var">$path</span>, <span class="php-var">$data</span>, <span class="php-var">$port</span> = <span class="php-num">80</span>)
<a href="#67" id="67" class="l"> 67: </a>{
<a href="#68" id="68" class="l"> 68: </a>
<a href="#69" id="69" class="l"> 69: </a>    <span class="php-var">$req</span> = _recaptcha_qsencode(<span class="php-var">$data</span>);
<a href="#70" id="70" class="l"> 70: </a>
<a href="#71" id="71" class="l"> 71: </a>    <span class="php-var">$http_request</span> = <span class="php-quote">&quot;POST </span><span class="php-var">$path</span><span class="php-quote"> HTTP/1.0\r\n&quot;</span>;
<a href="#72" id="72" class="l"> 72: </a>    <span class="php-var">$http_request</span> .= <span class="php-quote">&quot;Host: </span><span class="php-var">$host</span><span class="php-quote">\r\n&quot;</span>;
<a href="#73" id="73" class="l"> 73: </a>    <span class="php-var">$http_request</span> .= <span class="php-quote">&quot;Content-Type: application/x-www-form-urlencoded;\r\n&quot;</span>;
<a href="#74" id="74" class="l"> 74: </a>    <span class="php-var">$http_request</span> .= <span class="php-quote">&quot;Content-Length: &quot;</span> . <span class="php-keyword2">strlen</span>(<span class="php-var">$req</span>) . <span class="php-quote">&quot;\r\n&quot;</span>;
<a href="#75" id="75" class="l"> 75: </a>    <span class="php-var">$http_request</span> .= <span class="php-quote">&quot;User-Agent: reCAPTCHA/PHP\r\n&quot;</span>;
<a href="#76" id="76" class="l"> 76: </a>    <span class="php-var">$http_request</span> .= <span class="php-quote">&quot;\r\n&quot;</span>;
<a href="#77" id="77" class="l"> 77: </a>    <span class="php-var">$http_request</span> .= <span class="php-var">$req</span>;
<a href="#78" id="78" class="l"> 78: </a>
<a href="#79" id="79" class="l"> 79: </a>    <span class="php-var">$response</span> = <span class="php-quote">''</span>;
<a href="#80" id="80" class="l"> 80: </a>    <span class="php-keyword1">if</span> (<span class="php-keyword1">false</span> == (<span class="php-var">$fs</span> = @<span class="php-keyword2">fsockopen</span>(<span class="php-var">$host</span>, <span class="php-var">$port</span>, <span class="php-var">$errno</span>, <span class="php-var">$errstr</span>, <span class="php-num">10</span>))) {
<a href="#81" id="81" class="l"> 81: </a>        <span class="php-keyword1">die</span>(<span class="php-quote">'Could not open socket'</span>);
<a href="#82" id="82" class="l"> 82: </a>    }
<a href="#83" id="83" class="l"> 83: </a>
<a href="#84" id="84" class="l"> 84: </a>    <span class="php-keyword2">fwrite</span>(<span class="php-var">$fs</span>, <span class="php-var">$http_request</span>);
<a href="#85" id="85" class="l"> 85: </a>
<a href="#86" id="86" class="l"> 86: </a>    <span class="php-keyword1">while</span> (!<span class="php-keyword2">feof</span>(<span class="php-var">$fs</span>))
<a href="#87" id="87" class="l"> 87: </a>        <span class="php-var">$response</span> .= <span class="php-keyword2">fgets</span>(<span class="php-var">$fs</span>, <span class="php-num">1160</span>); <span class="php-comment">// One TCP-IP packet</span>
<a href="#88" id="88" class="l"> 88: </a>    <span class="php-keyword2">fclose</span>(<span class="php-var">$fs</span>);
<a href="#89" id="89" class="l"> 89: </a>    <span class="php-var">$response</span> = <span class="php-keyword2">explode</span>(<span class="php-quote">&quot;\r\n\r\n&quot;</span>, <span class="php-var">$response</span>, <span class="php-num">2</span>);
<a href="#90" id="90" class="l"> 90: </a>
<a href="#91" id="91" class="l"> 91: </a>    <span class="php-keyword1">return</span> <span class="php-var">$response</span>;
<a href="#92" id="92" class="l"> 92: </a>}
<a href="#93" id="93" class="l"> 93: </a>
<a href="#94" id="94" class="l"> 94: </a><span class="php-comment">/**
</span><a href="#95" id="95" class="l"> 95: </a><span class="php-comment"> * Gets the challenge HTML (javascript and non-javascript version).
</span><a href="#96" id="96" class="l"> 96: </a><span class="php-comment"> * This is called from the browser, and the resulting reCAPTCHA HTML widget
</span><a href="#97" id="97" class="l"> 97: </a><span class="php-comment"> * is embedded within the HTML form it was called from.
</span><a href="#98" id="98" class="l"> 98: </a><span class="php-comment"> * @param string $pubkey A public key for reCAPTCHA
</span><a href="#99" id="99" class="l"> 99: </a><span class="php-comment"> * @param string $error The error given by reCAPTCHA (optional, default is NULL)
</span><a href="#100" id="100" class="l">100: </a><span class="php-comment"> * @param boolean $use_ssl Should the request be made over ssl? (optional, default is FALSE)
</span><a href="#101" id="101" class="l">101: </a><span class="php-comment">
</span><a href="#102" id="102" class="l">102: </a><span class="php-comment"> * @return string - The HTML to be embedded in the user's form.
</span><a href="#103" id="103" class="l">103: </a><span class="php-comment"> */</span>
<a href="#104" id="104" class="l">104: </a><span class="php-keyword1">function</span> recaptcha_get_html(<span class="php-var">$pubkey</span>, <span class="php-var">$error</span> = <span class="php-keyword1">NULL</span>, <span class="php-var">$use_ssl</span> = <span class="php-keyword1">FALSE</span>)
<a href="#105" id="105" class="l">105: </a>{
<a href="#106" id="106" class="l">106: </a>    <span class="php-keyword1">if</span> (<span class="php-var">$pubkey</span> == <span class="php-keyword1">NULL</span> || <span class="php-var">$pubkey</span> == <span class="php-quote">''</span>) {
<a href="#107" id="107" class="l">107: </a>        <span class="php-keyword1">die</span>(
<a href="#108" id="108" class="l">108: </a>                <span class="php-quote">&quot;To use reCAPTCHA you must get an API key from &lt;a href='https://www.google.com/recaptcha/admin/create'&gt;https://www.google.com/recaptcha/admin/create&lt;/a&gt;&quot;</span>);
<a href="#109" id="109" class="l">109: </a>    }
<a href="#110" id="110" class="l">110: </a>
<a href="#111" id="111" class="l">111: </a>    <span class="php-keyword1">if</span> (<span class="php-var">$use_ssl</span>) {
<a href="#112" id="112" class="l">112: </a>        <span class="php-var">$server</span> = RECAPTCHA_API_SECURE_SERVER;
<a href="#113" id="113" class="l">113: </a>    } <span class="php-keyword1">else</span> {
<a href="#114" id="114" class="l">114: </a>        <span class="php-var">$server</span> = RECAPTCHA_API_SERVER;
<a href="#115" id="115" class="l">115: </a>    }
<a href="#116" id="116" class="l">116: </a>
<a href="#117" id="117" class="l">117: </a>    <span class="php-var">$errorpart</span> = <span class="php-quote">&quot;&quot;</span>;
<a href="#118" id="118" class="l">118: </a>    <span class="php-keyword1">if</span> (<span class="php-var">$error</span>) {
<a href="#119" id="119" class="l">119: </a>        <span class="php-var">$errorpart</span> = <span class="php-quote">&quot;&amp;amp;error=&quot;</span> . <span class="php-var">$error</span>;
<a href="#120" id="120" class="l">120: </a>    }
<a href="#121" id="121" class="l">121: </a>    <span class="php-keyword1">return</span> <span class="php-quote">'&lt;script type=&quot;text/javascript&quot; src=&quot;'</span> . <span class="php-var">$server</span> . <span class="php-quote">'/challenge?k='</span>
<a href="#122" id="122" class="l">122: </a>            . <span class="php-var">$pubkey</span> . <span class="php-var">$errorpart</span>
<a href="#123" id="123" class="l">123: </a>            . <span class="php-quote">'&quot;&gt;&lt;/script&gt;
</span><a href="#124" id="124" class="l">124: </a><span class="php-quote">
</span><a href="#125" id="125" class="l">125: </a><span class="php-quote"> &lt;noscript&gt;
</span><a href="#126" id="126" class="l">126: </a><span class="php-quote">    &lt;iframe src=&quot;'</span> . <span class="php-var">$server</span> . <span class="php-quote">'/noscript?k='</span> . <span class="php-var">$pubkey</span> . <span class="php-var">$errorpart</span>
<a href="#127" id="127" class="l">127: </a>            . <span class="php-quote">'&quot; height=&quot;300&quot; width=&quot;500&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;&lt;br/&gt;
</span><a href="#128" id="128" class="l">128: </a><span class="php-quote">    &lt;textarea name=&quot;recaptcha_challenge_field&quot; rows=&quot;3&quot; cols=&quot;40&quot;&gt;&lt;/textarea&gt;
</span><a href="#129" id="129" class="l">129: </a><span class="php-quote">    &lt;input type=&quot;hidden&quot; name=&quot;recaptcha_response_field&quot; value=&quot;manual_challenge&quot;/&gt;
</span><a href="#130" id="130" class="l">130: </a><span class="php-quote"> &lt;/noscript&gt;'</span>;
<a href="#131" id="131" class="l">131: </a>}
<a href="#132" id="132" class="l">132: </a>
<a href="#133" id="133" class="l">133: </a><span class="php-comment">/**
</span><a href="#134" id="134" class="l">134: </a><span class="php-comment"> * A ReCaptchaResponse is returned from recaptcha_check_answer()
</span><a href="#135" id="135" class="l">135: </a><span class="php-comment"> */</span>
<a href="#136" id="136" class="l">136: </a><span class="php-keyword1">class</span> ReCaptchaResponse
<a href="#137" id="137" class="l">137: </a>{
<a href="#138" id="138" class="l">138: </a>
<a href="#139" id="139" class="l">139: </a>    <span class="php-keyword1">var</span> <span class="php-var">$is_valid</span>;
<a href="#140" id="140" class="l">140: </a>    <span class="php-keyword1">var</span> <span class="php-var">$error</span>;
<a href="#141" id="141" class="l">141: </a>}
<a href="#142" id="142" class="l">142: </a>
<a href="#143" id="143" class="l">143: </a><span class="php-comment">/**
</span><a href="#144" id="144" class="l">144: </a><span class="php-comment"> * Calls an HTTP POST function to verify if the user's guess was correct
</span><a href="#145" id="145" class="l">145: </a><span class="php-comment"> * @param string $privkey
</span><a href="#146" id="146" class="l">146: </a><span class="php-comment"> * @param string $remoteip
</span><a href="#147" id="147" class="l">147: </a><span class="php-comment"> * @param string $challenge
</span><a href="#148" id="148" class="l">148: </a><span class="php-comment"> * @param string $response
</span><a href="#149" id="149" class="l">149: </a><span class="php-comment"> * @param array $extra_params an array of extra variables to post to the server
</span><a href="#150" id="150" class="l">150: </a><span class="php-comment"> * @return ReCaptchaResponse
</span><a href="#151" id="151" class="l">151: </a><span class="php-comment"> */</span>
<a href="#152" id="152" class="l">152: </a><span class="php-keyword1">function</span> recaptcha_check_answer(<span class="php-var">$privkey</span>, <span class="php-var">$remoteip</span>, <span class="php-var">$challenge</span>, <span class="php-var">$response</span>,
<a href="#153" id="153" class="l">153: </a>        <span class="php-var">$extra_params</span> = <span class="php-keyword1">array</span>())
<a href="#154" id="154" class="l">154: </a>{
<a href="#155" id="155" class="l">155: </a>    <span class="php-keyword1">if</span> (<span class="php-var">$privkey</span> == <span class="php-keyword1">NULL</span> || <span class="php-var">$privkey</span> == <span class="php-quote">''</span>) {
<a href="#156" id="156" class="l">156: </a>        <span class="php-keyword1">die</span>(
<a href="#157" id="157" class="l">157: </a>                <span class="php-quote">&quot;To use reCAPTCHA you must get an API key from &lt;a href='https://www.google.com/recaptcha/admin/create'&gt;https://www.google.com/recaptcha/admin/create&lt;/a&gt;&quot;</span>);
<a href="#158" id="158" class="l">158: </a>    }
<a href="#159" id="159" class="l">159: </a>
<a href="#160" id="160" class="l">160: </a>    <span class="php-keyword1">if</span> (<span class="php-var">$remoteip</span> == <span class="php-keyword1">NULL</span> || <span class="php-var">$remoteip</span> == <span class="php-quote">''</span>) {
<a href="#161" id="161" class="l">161: </a>        <span class="php-keyword1">die</span>(<span class="php-quote">&quot;For security reasons, you must pass the remote ip to reCAPTCHA&quot;</span>);
<a href="#162" id="162" class="l">162: </a>    }
<a href="#163" id="163" class="l">163: </a>
<a href="#164" id="164" class="l">164: </a>    <span class="php-comment">//discard spam submissions</span>
<a href="#165" id="165" class="l">165: </a>    <span class="php-keyword1">if</span> (<span class="php-var">$challenge</span> == <span class="php-keyword1">NULL</span> || <span class="php-keyword2">strlen</span>(<span class="php-var">$challenge</span>) == <span class="php-num">0</span> || <span class="php-var">$response</span> == <span class="php-keyword1">NULL</span>
<a href="#166" id="166" class="l">166: </a>            || <span class="php-keyword2">strlen</span>(<span class="php-var">$response</span>) == <span class="php-num">0</span>) {
<a href="#167" id="167" class="l">167: </a>        <span class="php-var">$recaptcha_response</span> = <span class="php-keyword1">new</span> ReCaptchaResponse();
<a href="#168" id="168" class="l">168: </a>        <span class="php-var">$recaptcha_response</span>-&gt;is_valid = <span class="php-keyword1">FALSE</span>;
<a href="#169" id="169" class="l">169: </a>        <span class="php-var">$recaptcha_response</span>-&gt;error = <span class="php-quote">'incorrect-captcha-sol'</span>;
<a href="#170" id="170" class="l">170: </a>        <span class="php-keyword1">return</span> <span class="php-var">$recaptcha_response</span>;
<a href="#171" id="171" class="l">171: </a>    }
<a href="#172" id="172" class="l">172: </a>
<a href="#173" id="173" class="l">173: </a>    <span class="php-var">$response</span> = _recaptcha_http_post(RECAPTCHA_VERIFY_SERVER,
<a href="#174" id="174" class="l">174: </a>            <span class="php-quote">&quot;/recaptcha/api/verify&quot;</span>,
<a href="#175" id="175" class="l">175: </a>            <span class="php-keyword1">array</span>(
<a href="#176" id="176" class="l">176: </a>                    <span class="php-quote">'privatekey'</span> =&gt; <span class="php-var">$privkey</span>,
<a href="#177" id="177" class="l">177: </a>                    <span class="php-quote">'remoteip'</span> =&gt; <span class="php-var">$remoteip</span>,
<a href="#178" id="178" class="l">178: </a>                    <span class="php-quote">'challenge'</span> =&gt; <span class="php-var">$challenge</span>,
<a href="#179" id="179" class="l">179: </a>                    <span class="php-quote">'response'</span> =&gt; <span class="php-var">$response</span>
<a href="#180" id="180" class="l">180: </a>            ) + <span class="php-var">$extra_params</span>);
<a href="#181" id="181" class="l">181: </a>
<a href="#182" id="182" class="l">182: </a>    <span class="php-var">$answers</span> = <span class="php-keyword2">explode</span>(<span class="php-quote">&quot;\n&quot;</span>, <span class="php-var">$response</span>[<span class="php-num">1</span>]);
<a href="#183" id="183" class="l">183: </a>    <span class="php-var">$recaptcha_response</span> = <span class="php-keyword1">new</span> ReCaptchaResponse();
<a href="#184" id="184" class="l">184: </a>
<a href="#185" id="185" class="l">185: </a>    <span class="php-keyword1">if</span> (<span class="php-keyword2">trim</span>(<span class="php-var">$answers</span>[<span class="php-num">0</span>]) == <span class="php-quote">'TRUE'</span>) {
<a href="#186" id="186" class="l">186: </a>        <span class="php-var">$recaptcha_response</span>-&gt;is_valid = <span class="php-keyword1">TRUE</span>;
<a href="#187" id="187" class="l">187: </a>    } <span class="php-keyword1">else</span> {
<a href="#188" id="188" class="l">188: </a>        <span class="php-var">$recaptcha_response</span>-&gt;is_valid = <span class="php-keyword1">FALSE</span>;
<a href="#189" id="189" class="l">189: </a>        <span class="php-var">$recaptcha_response</span>-&gt;error = <span class="php-var">$answers</span>[<span class="php-num">1</span>];
<a href="#190" id="190" class="l">190: </a>    }
<a href="#191" id="191" class="l">191: </a>    <span class="php-keyword1">return</span> <span class="php-var">$recaptcha_response</span>;
<a href="#192" id="192" class="l">192: </a>
<a href="#193" id="193" class="l">193: </a>}
<a href="#194" id="194" class="l">194: </a>
<a href="#195" id="195" class="l">195: </a><span class="php-comment">/**
</span><a href="#196" id="196" class="l">196: </a><span class="php-comment"> * gets a URL where the user can sign up for reCAPTCHA. If your application
</span><a href="#197" id="197" class="l">197: </a><span class="php-comment"> * has a configuration page where you enter a key, you should provide a link
</span><a href="#198" id="198" class="l">198: </a><span class="php-comment"> * using this function.
</span><a href="#199" id="199" class="l">199: </a><span class="php-comment"> * @param string $domain The domain where the page is hosted
</span><a href="#200" id="200" class="l">200: </a><span class="php-comment"> * @param string $appname The name of your application
</span><a href="#201" id="201" class="l">201: </a><span class="php-comment"> */</span>
<a href="#202" id="202" class="l">202: </a><span class="php-keyword1">function</span> recaptcha_get_signup_url(<span class="php-var">$domain</span> = <span class="php-keyword1">NULL</span>, <span class="php-var">$appname</span> = <span class="php-keyword1">NULL</span>)
<a href="#203" id="203" class="l">203: </a>{
<a href="#204" id="204" class="l">204: </a>    <span class="php-keyword1">return</span> <span class="php-quote">&quot;https://www.google.com/recaptcha/admin/create?&quot;</span>
<a href="#205" id="205" class="l">205: </a>            . _recaptcha_qsencode(
<a href="#206" id="206" class="l">206: </a>                    <span class="php-keyword1">array</span>(
<a href="#207" id="207" class="l">207: </a>                            <span class="php-quote">'domains'</span> =&gt; <span class="php-var">$domain</span>,
<a href="#208" id="208" class="l">208: </a>                            <span class="php-quote">'app'</span> =&gt; <span class="php-var">$appname</span>
<a href="#209" id="209" class="l">209: </a>                    ));
<a href="#210" id="210" class="l">210: </a>}
<a href="#211" id="211" class="l">211: </a>
<a href="#212" id="212" class="l">212: </a><span class="php-keyword1">function</span> _recaptcha_aes_pad(<span class="php-var">$val</span>)
<a href="#213" id="213" class="l">213: </a>{
<a href="#214" id="214" class="l">214: </a>    <span class="php-var">$block_size</span> = <span class="php-num">16</span>;
<a href="#215" id="215" class="l">215: </a>    <span class="php-var">$numpad</span> = <span class="php-var">$block_size</span> - (<span class="php-keyword2">strlen</span>(<span class="php-var">$val</span>) % <span class="php-var">$block_size</span>);
<a href="#216" id="216" class="l">216: </a>    <span class="php-keyword1">return</span> <span class="php-keyword2">str_pad</span>(<span class="php-var">$val</span>, <span class="php-keyword2">strlen</span>(<span class="php-var">$val</span>) + <span class="php-var">$numpad</span>, <span class="php-keyword2">chr</span>(<span class="php-var">$numpad</span>));
<a href="#217" id="217" class="l">217: </a>}
<a href="#218" id="218" class="l">218: </a>
<a href="#219" id="219" class="l">219: </a><span class="php-comment">/* Mailhide related code */</span>
<a href="#220" id="220" class="l">220: </a>
<a href="#221" id="221" class="l">221: </a><span class="php-keyword1">function</span> _recaptcha_aes_encrypt(<span class="php-var">$val</span>, <span class="php-var">$ky</span>)
<a href="#222" id="222" class="l">222: </a>{
<a href="#223" id="223" class="l">223: </a>    <span class="php-keyword1">if</span> (!<span class="php-keyword2">function_exists</span>(<span class="php-quote">&quot;mcrypt_encrypt&quot;</span>)) {
<a href="#224" id="224" class="l">224: </a>        <span class="php-keyword1">die</span>(
<a href="#225" id="225" class="l">225: </a>                <span class="php-quote">&quot;To use reCAPTCHA Mailhide, you need to have the mcrypt php module installed.&quot;</span>);
<a href="#226" id="226" class="l">226: </a>    }
<a href="#227" id="227" class="l">227: </a>    <span class="php-var">$mode</span> = MCRYPT_MODE_CBC;
<a href="#228" id="228" class="l">228: </a>    <span class="php-var">$enc</span> = MCRYPT_RIJNDAEL_128;
<a href="#229" id="229" class="l">229: </a>    <span class="php-var">$val</span> = _recaptcha_aes_pad(<span class="php-var">$val</span>);
<a href="#230" id="230" class="l">230: </a>    <span class="php-keyword1">return</span> <span class="php-keyword2">mcrypt_encrypt</span>(<span class="php-var">$enc</span>, <span class="php-var">$ky</span>, <span class="php-var">$val</span>, <span class="php-var">$mode</span>,
<a href="#231" id="231" class="l">231: </a>            <span class="php-quote">&quot;\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&quot;</span>);
<a href="#232" id="232" class="l">232: </a>}
<a href="#233" id="233" class="l">233: </a>
<a href="#234" id="234" class="l">234: </a><span class="php-keyword1">function</span> _recaptcha_mailhide_urlbase64(<span class="php-var">$x</span>)
<a href="#235" id="235" class="l">235: </a>{
<a href="#236" id="236" class="l">236: </a>    <span class="php-keyword1">return</span> <span class="php-keyword2">strtr</span>(<span class="php-keyword2">base64_encode</span>(<span class="php-var">$x</span>), <span class="php-quote">'+/'</span>, <span class="php-quote">'-_'</span>);
<a href="#237" id="237" class="l">237: </a>}
<a href="#238" id="238" class="l">238: </a>
<a href="#239" id="239" class="l">239: </a><span class="php-comment">/* gets the reCAPTCHA Mailhide url for a given email, public key and private key */</span>
<a href="#240" id="240" class="l">240: </a>
<a href="#241" id="241" class="l">241: </a><span class="php-keyword1">function</span> recaptcha_mailhide_url(<span class="php-var">$pubkey</span>, <span class="php-var">$privkey</span>, <span class="php-var">$email</span>)
<a href="#242" id="242" class="l">242: </a>{
<a href="#243" id="243" class="l">243: </a>    <span class="php-keyword1">if</span> (<span class="php-var">$pubkey</span> == <span class="php-quote">''</span> || <span class="php-var">$pubkey</span> == <span class="php-keyword1">NULL</span> || <span class="php-var">$privkey</span> == <span class="php-quote">&quot;&quot;</span> || <span class="php-var">$privkey</span> == <span class="php-keyword1">NULL</span>) {
<a href="#244" id="244" class="l">244: </a>        <span class="php-keyword1">die</span>(
<a href="#245" id="245" class="l">245: </a>                <span class="php-quote">&quot;To use reCAPTCHA Mailhide, you have to sign up for a public and private key, &quot;</span>
<a href="#246" id="246" class="l">246: </a>                        . <span class="php-quote">&quot;you can do so at &lt;a href='http://www.google.com/recaptcha/mailhide/apikey'&gt;http://www.google.com/recaptcha/mailhide/apikey&lt;/a&gt;&quot;</span>);
<a href="#247" id="247" class="l">247: </a>    }
<a href="#248" id="248" class="l">248: </a>
<a href="#249" id="249" class="l">249: </a>    <span class="php-var">$ky</span> = <span class="php-keyword2">pack</span>(<span class="php-quote">'H*'</span>, <span class="php-var">$privkey</span>);
<a href="#250" id="250" class="l">250: </a>    <span class="php-var">$cryptmail</span> = _recaptcha_aes_encrypt(<span class="php-var">$email</span>, <span class="php-var">$ky</span>);
<a href="#251" id="251" class="l">251: </a>
<a href="#252" id="252" class="l">252: </a>    <span class="php-keyword1">return</span> <span class="php-quote">&quot;http://www.google.com/recaptcha/mailhide/d?k=&quot;</span> . <span class="php-var">$pubkey</span> . <span class="php-quote">&quot;&amp;c=&quot;</span>
<a href="#253" id="253" class="l">253: </a>            . _recaptcha_mailhide_urlbase64(<span class="php-var">$cryptmail</span>);
<a href="#254" id="254" class="l">254: </a>}
<a href="#255" id="255" class="l">255: </a>
<a href="#256" id="256" class="l">256: </a><span class="php-comment">/**
</span><a href="#257" id="257" class="l">257: </a><span class="php-comment"> * gets the parts of the email to expose to the user.
</span><a href="#258" id="258" class="l">258: </a><span class="php-comment"> * eg, given johndoe@example,com return [&quot;john&quot;, &quot;example.com&quot;].
</span><a href="#259" id="259" class="l">259: </a><span class="php-comment"> * the email is then displayed as john...@example.com
</span><a href="#260" id="260" class="l">260: </a><span class="php-comment"> */</span>
<a href="#261" id="261" class="l">261: </a><span class="php-keyword1">function</span> _recaptcha_mailhide_email_parts(<span class="php-var">$email</span>)
<a href="#262" id="262" class="l">262: </a>{
<a href="#263" id="263" class="l">263: </a>    <span class="php-var">$arr</span> = <span class="php-keyword2">preg_split</span>(<span class="php-quote">&quot;/@/&quot;</span>, <span class="php-var">$email</span>);
<a href="#264" id="264" class="l">264: </a>
<a href="#265" id="265" class="l">265: </a>    <span class="php-keyword1">if</span> (<span class="php-keyword2">strlen</span>(<span class="php-var">$arr</span>[<span class="php-num">0</span>]) &lt;= <span class="php-num">4</span>) {
<a href="#266" id="266" class="l">266: </a>        <span class="php-var">$arr</span>[<span class="php-num">0</span>] = <span class="php-keyword2">substr</span>(<span class="php-var">$arr</span>[<span class="php-num">0</span>], <span class="php-num">0</span>, <span class="php-num">1</span>);
<a href="#267" id="267" class="l">267: </a>    } <span class="php-keyword1">else</span> <span class="php-keyword1">if</span> (<span class="php-keyword2">strlen</span>(<span class="php-var">$arr</span>[<span class="php-num">0</span>]) &lt;= <span class="php-num">6</span>) {
<a href="#268" id="268" class="l">268: </a>        <span class="php-var">$arr</span>[<span class="php-num">0</span>] = <span class="php-keyword2">substr</span>(<span class="php-var">$arr</span>[<span class="php-num">0</span>], <span class="php-num">0</span>, <span class="php-num">3</span>);
<a href="#269" id="269" class="l">269: </a>    } <span class="php-keyword1">else</span> {
<a href="#270" id="270" class="l">270: </a>        <span class="php-var">$arr</span>[<span class="php-num">0</span>] = <span class="php-keyword2">substr</span>(<span class="php-var">$arr</span>[<span class="php-num">0</span>], <span class="php-num">0</span>, <span class="php-num">4</span>);
<a href="#271" id="271" class="l">271: </a>    }
<a href="#272" id="272" class="l">272: </a>    <span class="php-keyword1">return</span> <span class="php-var">$arr</span>;
<a href="#273" id="273" class="l">273: </a>}
<a href="#274" id="274" class="l">274: </a>
<a href="#275" id="275" class="l">275: </a><span class="php-comment">/**
</span><a href="#276" id="276" class="l">276: </a><span class="php-comment"> * Gets html to display an email address given a public an private key.
</span><a href="#277" id="277" class="l">277: </a><span class="php-comment"> * to get a key, go to:
</span><a href="#278" id="278" class="l">278: </a><span class="php-comment"> *
</span><a href="#279" id="279" class="l">279: </a><span class="php-comment"> * http://www.google.com/recaptcha/mailhide/apikey
</span><a href="#280" id="280" class="l">280: </a><span class="php-comment"> */</span>
<a href="#281" id="281" class="l">281: </a><span class="php-keyword1">function</span> recaptcha_mailhide_html(<span class="php-var">$pubkey</span>, <span class="php-var">$privkey</span>, <span class="php-var">$email</span>)
<a href="#282" id="282" class="l">282: </a>{
<a href="#283" id="283" class="l">283: </a>    <span class="php-var">$emailparts</span> = _recaptcha_mailhide_email_parts(<span class="php-var">$email</span>);
<a href="#284" id="284" class="l">284: </a>    <span class="php-var">$url</span> = recaptcha_mailhide_url(<span class="php-var">$pubkey</span>, <span class="php-var">$privkey</span>, <span class="php-var">$email</span>);
<a href="#285" id="285" class="l">285: </a>
<a href="#286" id="286" class="l">286: </a>    <span class="php-keyword1">return</span> <span class="php-keyword2">htmlentities</span>(<span class="php-var">$emailparts</span>[<span class="php-num">0</span>]) . <span class="php-quote">&quot;&lt;a href='&quot;</span> . <span class="php-keyword2">htmlentities</span>(<span class="php-var">$url</span>)
<a href="#287" id="287" class="l">287: </a>            . <span class="php-quote">&quot;' onclick=\&quot;window.open('&quot;</span> . <span class="php-keyword2">htmlentities</span>(<span class="php-var">$url</span>)
<a href="#288" id="288" class="l">288: </a>            . <span class="php-quote">&quot;', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return FALSE;\&quot; title=\&quot;Reveal this e-mail address\&quot;&gt;...&lt;/a&gt;@&quot;</span>
<a href="#289" id="289" class="l">289: </a>            . <span class="php-keyword2">htmlentities</span>(<span class="php-var">$emailparts</span>[<span class="php-num">1</span>]);
<a href="#290" id="290" class="l">290: </a>
<a href="#291" id="291" class="l">291: </a>}
<a href="#292" id="292" class="l">292: </a>
<a href="#293" id="293" class="l">293: </a><span class="xlang">?&gt;</span>
<a href="#294" id="294" class="l">294: </a></code></pre>

	<div id="footer">
		nort API documentation generated by <a href="http://apigen.org">ApiGen 2.7.0</a>
	</div>
</div>
</div>
</body>
</html>
